/**
 * @Function 调用远程服务
 * @ProjectName credit-data-platform
 * @PackageName com.py.credit.service
 * @FileName RemoteBaseService.java
 * @Date 2018年5月16日上午10:57:42
 * @Author Min DongXv
 * @Copyright (c) 2018, 金电联行 All Rights Reserved.
 */
package com.py.credit.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;

import com.py.credit.common.rest.RestServiceResult;
import com.py.credit.entity.DictEntity;
import com.py.credit.entity.MsgContentEntity;
import com.py.credit.entity.SysUser;
import com.py.framework.core.entity.MenuEntity;
import com.py.framework.core.entity.SysAreaEntity;
import com.py.framework.core.entity.SysOfficeEntity;
import com.py.framework.core.entity.SysUserEntity;
import com.py.framework.core.entity.WorkFlowBus;

/**
 * @Function 调用远程服务
 * @ClassName RemoteBaseService
 * @Date 2018年5月16日 上午10:57:42
 * @Author Min DongXv
 */
public interface RemoteBaseService {

    /**
     * @param deptId
     * @return
     * @Function 通过部门ID获取区域ID
     * @FileName RemoteBaseService.java
     * @MethodName getAreaName
     * @Date 2018年5月16日 上午11:00:06
     * @Author Min DongXv
     */
    public RestServiceResult<Integer> getAreaID(long deptId);

    /**
     * @param regions
     * @return
     * @Function 通过区域ID获取区域名称对应MAP
     * @FileName RemoteBaseService.java
     * @MethodName getAreaName
     * @Date 2018年5月16日 上午11:00:06
     * @Author Min DongXv
     */
    public RestServiceResult<Map<String, String>> getAreaName(Set<String> regions, String jdToken);

    /**
     * @param regions
     * @return
     * @Function 通过区域ID获取区域列表
     * @FileName RemoteBaseService.java
     * @MethodName getAreaList
     * @Date 2018年5月16日 上午11:00:06
     * @Author Min DongXv
     */
    public RestServiceResult<List<SysAreaEntity>> getAreaList(Set<String> regions, String jdToken);

    /**
     * @param list
     * @Function 发送站内信
     * @FileName RemoteBaseService.java
     * @MethodName sendMsg
     * @Date 2018年5月16日 上午11:38:49
     * @Author Min DongXv
     */
    public Future<HttpResponse> sendMsg(List<MsgContentEntity> list, String jdToken);

    /**
     * @param ids 用户ID
     * @return
     * @Function 通过用户ID获取用户列表
     * @FileName RemoteBaseService.java
     * @MethodName getUsersByIds
     * @Date 2018年5月19日 下午4:44:58
     * @Author Min DongXv
     */
    public RestServiceResult<List<SysUserEntity>> getUsersByIds(Set<Integer> ids, String jdToken);

    /**
     * @return
     * @Function 获取当前用户信息
     * @FileName RemoteBaseService.java
     * @MethodName getCurrentUser
     * @Date 2018年5月19日 下午4:44:59
     * @Author Min DongXv
     */
    public RestServiceResult<SysUser> getCurrentUser(String jdToken);

    /**
     * @return
     * @Function 获取当前用户的ID
     * @FileName RemoteBaseService.java
     * @MethodName getCurrentUserId
     * @Date 2018年5月21日 上午10:14:02
     * @Author Min DongXv
     */
    public Long getCurrentUserId(String jdToken);

    /**
     * @param areaId 区域ID为空获取所有部门信息
     * @return
     * @Function 通过区域ID获取部门信息
     * @FileName RemoteBaseService.java
     * @MethodName getOfficesByAreaId
     * @Date 2018年5月21日 上午11:08:18
     * @Author Min DongXv
     */
    public RestServiceResult<List<SysOfficeEntity>> getOfficesByAreaId(String areaId, String jdToken);

    /**
     * @param ids
     * @return
     * @Function 获取用户id和名字对应关系
     * @FileName RemoteBaseService.java
     * @MethodName getUserName
     * @Date 2018年5月22日 上午11:06:56
     * @Author Min DongXv
     */
    RestServiceResult<Map<String, String>> getUserName(Set<Integer> ids, String jdToken);

    /**
     * @param jdToken
     * @return
     * @Function 获取当前用户的所有部门信息，包括下级子部门
     * @FileName RemoteBaseService.java
     * @MethodName getCurrentUserOffices
     * @Date 2018年5月24日 上午10:55:44
     * @Author Min DongXv
     */
    RestServiceResult<List<SysOfficeEntity>> getCurrentUserOffices(String jdToken);

    /**
     * @param jdToken
     * @return
     * @Function 获取当前用户的所有部门信息，包括下级子部门 ID和名字的Map
     * @FileName RemoteBaseService.java
     * @MethodName getCurrentUserOfficesName
     * @Date 2018年5月24日 上午10:56:21
     * @Author Min DongXv
     */
    RestServiceResult<Map<String, String>> getCurrentUserOfficesName(String jdToken);

    /**
     * @param tableList 数据列表
     * @param result    返回结果集
     * @param token     token
     * @param userIds   用户ID SET
     * @param idCode    列表中ID的key
     * @param nameCode  列表中name的key
     * @return
     * @Function 调用用户远程服务，进行姓名填充
     * @FileName RemoteBaseService.java
     * @MethodName matchUserName
     * @Date 2018年5月9日 上午10:33:29
     * @Author Min DongXv
     */
    List<Map<String, Object>> matchUserName(List<Map<String, Object>> tableList,
                                            RestServiceResult<List<Map<String, Object>>> result, String token, Set<Integer> userIds, String idCode,
                                            String nameCode);

    /**
     * @param data     数据列表
     * @param result   结果集
     * @param token
     * @param regions  区域ID SET
     * @param idCode   列表中ID的key
     * @param nameCode 列表中name的key
     * @return
     * @Function 调用用户远程服务，进行区域名称填充
     * @FileName RemoteBaseService.java
     * @MethodName matchAreaName
     * @Date 2018年5月24日 下午4:10:53
     * @Author Min DongXv
     */
    List<Map<String, Object>> matchAreaName(List<Map<String, Object>> data,
                                            RestServiceResult<List<Map<String, Object>>> result, String token, Set<String> regions, String idCode,
                                            String nameCode);

    /**
     * @param tableList 数据列表
     * @param result    结果集
     * @param token
     * @param userIds   用户ID
     * @param idCode    列表中用户ID的key
     * @param nameCode  列表中用户名字的key
     * @param deptCode  列表中部门名字的key
     * @return
     * @Function 填充用户名字和部门名字
     * @FileName RemoteBaseServiceImpl.java
     * @MethodName matchUserDeptName
     * @Date 2018年5月24日 下午4:59:33
     * @Author Min DongXv
     */
    List<Map<String, Object>> matchUserDeptName(List<Map<String, Object>> tableList,
                                                RestServiceResult<List<Map<String, Object>>> result, String token, Set<Integer> userIds, String idCode,
                                                String nameCode, String deptCode);

    public RestServiceResult<List<MenuEntity>> getCurrentResourceMenus(String jdToken);

    /**
     * @param jdToken
     * @return
     * @Function 获取所有区域信息远程服务
     * @FileName RemoteBaseService.java
     * @MethodName getAllAreas
     * @Date 2018年5月30日 下午1:49:06
     * @Author Min DongXv
     */
    RestServiceResult<List<SysAreaEntity>> getAllAreas(String areaId, String jdToken);

    /**
     * @param jdToken
     * @return
     * @Function 获取当前用户的区域及其下级区域信息
     * @FileName RemoteBaseServiceImpl.java
     * @MethodName getCurrentAreas
     * @Date 2018年6月1日 下午2:23:01
     * @Author Min DongXv
     */
    RestServiceResult<List<SysAreaEntity>> getCurrentAreas(String jdToken);

    /**
     * @param dictKey 字典主表ID
     * @return
     * @Function 通过字典主表ID获取字典列表信息
     * @FileName RemoteBaseService.java
     * @MethodName getDictByDictId
     * @Date 2018年6月26日 下午1:49:02
     * @Author Min DongXv
     */
    RestServiceResult<List<DictEntity>> getDictByDictKey(String dictKey);

    /**
     * @param dictKey 字典主表key
     * @param dtlKey  字典值的key
     * @return
     * @Function 通过字典表ID获取特定字典表数据
     * @FileName RemoteBaseService.java
     * @MethodName getDictByDtlKey
     * @Date 2018年6月26日 下午1:53:35
     * @Author Min DongXv
     */
    RestServiceResult<DictEntity> getDictByDtlKey(String dictKey, String dtlKey);

    /**
     * 添加待审批业务数据
     *
     * @param wfKey     工作流唯一key
     * @param accessKey 访问权限key
     * @param userId    业务添加用户
     * @param sysId     业务所属系统id
     * @param busId     业务id
     * @param busName   业务名称
     * @param busUrl    业务页面url
     * @param busType   业务类型
     * @param remark    备注
     * @return
     */
    RestServiceResult<Map<String, Object>> addWorkFlow(String wfKey, String accessKey, String userId, String sysId,
                                                       String busId, String busName, String busUrl, String busType, String remark);

    /**
     * 获取已审批完的工作流
     *
     * @return
     */
    public RestServiceResult<List<WorkFlowBus>> getHandledWorkFlowBus();

    public RestServiceResult<String> updateWorkFlowBusUpdateFlag(String id);

    RestServiceResult<List<SysUser>> getDeptAdminUsers(String deptIds, String jdToken);

    /**
     * 远程调用获取工作流异议处理业务id
     *
     * @param taskId
     * @return
     */
    public RestServiceResult<Integer> getBusIdBuyTaskId(String taskId);

    /**
     * @param procId
     */
    public RestServiceResult<SysUserEntity> getLastAssignee(String procId);

    public RestServiceResult<List<Map>> getLoginTimesByDept();

    public RestServiceResult<List<Map>> getMessDatas();

    public RestServiceResult<List<SysUserEntity>> getAllUserByTopDeptId(String deptId);

    public RestServiceResult<Integer> getDataCollectionMessageNum();

    /**
     * 获取部门管理员的所有顶级部门id
     *
     * @return
     */
    public List<LinkedHashMap> getManagerDeptList();

    /**
     * 功能描述: 查询异议处理历史记录
     *
     * @param tybm 统一社会信用代码
     * @return
     * @author YaoS
     * @date 19/1/23 14:18
     */
    LinkedHashMap getDissentProcessHistory(String tybm,String id);

    /**
     * 功能描述: 异议处理调用工作流
     *
     * @param
     * @return
     * @author YaoS
     * @date 19/1/23 16:51
     */
    List<LinkedHashMap> examineTask(
            String taskId, String procId, String userId, String paramName,
            String paramValue, String comment, SysUser user, String jdToken);
	
	/**
	 * 获取部门管理员的所有顶级部门id
	 * @return
	 */
	public LinkedHashMap getUserInfo(int id);
	
	public String updateCheckReport(int id,String checkTime,String checkStatus,String pdfpath);
	
	public RestServiceResult<List<Map>> getlhcf(String ztmc,String bm,String type, String jdToken);
	
	public RestServiceResult<List<Map>> getXyjg(String ztmc,String bm,String type, String jdToken);

	/**
	 * 获取规则对应数据接口
	 * @param tybm
	 * @return
	 */
	public List<Map<String, Object>>  getRuleData(String tybm,String kId) ;
	
	public List<Map<String, String>>  getIndexInfo(String data);

	public RestServiceResult<List<SysUser>> getUsers();
}
